package com.hmkj.core.api.wechat.utils;

import com.hmkj.core.api.wechat.sedion.advanced.model.WeixinQRCode;
import com.hmkj.core.api.wechat.sedion.advanced.util.CreateQRCode;
import com.hmkj.core.api.wechat.sedion.basic.util.SendBasicService;
import com.hmkj.core.api.wechat.sedion.wechatapi.util.SignUtil;
import com.hmkj.core.api.wechat.sedion.wechatapi.util.XmlMessUtil;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * 微信工具类
 * Created by Donfy on 2017/7/7.
 */
public class WechatUtils {
//    private static final String token = "xixixi";
//    private static final String appID = "wxb7120953abc38f26";
//    private static final String appsecret = "393c8169508c5e18616af12b5cdac357";


    /**
     * 创建临时带参数二维码
     *
     * @param expireSeconds 二维码的有效时间，以秒为单位，最大不超过2592000秒(30天)
     * @param sceneId       场景值ID，临时二维码时为32位非0整型，永久二维码时最大值为100000（目前参数只支持1--100000）
     * @return WeixinQRCode
     */
    public static WeixinQRCode createTemporaryQRCode(String appID, String appsecret, int expireSeconds, int sceneId) {
        return CreateQRCode.createTemporaryQRCode(getAccessToken(appID, appsecret), expireSeconds, sceneId);
    }

    /**
     * 获取access_token
     *
     * @return AccessToken 返回接口凭证
     */
    public static String getAccessToken(String appID, String appsecret) {
        return CreateQRCode.getAccessToken(appID, appsecret).getAccesstoken();
    }

    /**
     * 发送消息
     * fromusername - 粉丝openid
     * tousername - 微信公众号
     * respContent - 回复信息
     *
     * @param msg
     */
    public static String sendTextmessage(String forUserName, String toUserName, String msg) {
        return SendBasicService.sendTextmessage(forUserName, toUserName, msg);
    }

    /**
     * 验证消息真实性
     *
     * @param signature 微信加密签名，signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
     * @param timestamp 时间戳
     * @param nonce     随机数
     * @return
     */
    public static boolean checkSignature(String token, String signature, String timestamp, String nonce) {
        return SignUtil.checkSignature(signature, timestamp, nonce, token);
    }

    /**
     * 解析返回数据
     *
     * @param request
     * @return
     * @throws Exception
     */
    public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {
        return XmlMessUtil.parseXml(request);
    }

}
